#include <iostream>
#include "IndexOrganization.h"
#include "RecordHandler.h"
#include "SequenceSet.h"


int main(int argc, char **argv)
{
	SequenceSet sequence1;
	sequence1.setFilename("sampleSourcesafeINDEXstationCode.dat");
	sequence1.setOffset(4224);
	sequence1.load();
	sequence1.print();
	
	SequenceSet sequence2;
	sequence2.setFilename("sampleSourcesafeINDEXstationCode.dat");
	sequence2.setOffset(20608);
	sequence2.load();
	sequence2.print();
	
//	IndexOrganization * organization = new IndexOrganization();
//
//	campo esquema[] = { {"PADRON", UNSIGNED | INT, 1},  {"NOMBRE", CHAR, 15}, {"APELLIDO", CHAR, 20}, {"DNI", UNSIGNED | INT, 1}, {"PROMEDIO", FLOAT, 1}, {0, 0, 0} };
//	campo clavePrim[] = { {"DNI", UNSIGNED | INT, 1},  {0, 0, 0} };
//
//	campo claveSec[] = { {"NOMBRE", CHAR, 15}, {"APELLIDO", CHAR, 20}, {0, 0, 0} };
//
//	unsigned int padron = 0;
//	char nombre[15];
//	char apellido[20];
//	unsigned int dni = 0;
//	double promedio = 0;
//
//	unsigned int sizeReg = RecordHandler::REG_SIZEOF(esquema);
//	int handler = 0;
//	int indexId = 0;
//	int status = 0;
//	
//	char *reg1 = new char[sizeReg];
//	char *reg2 = new char[sizeReg];
//	char *reg3 = new char[sizeReg];
//	char *reg4 = new char[sizeReg];
//	char *reg5 = new char[sizeReg];
//	char *reg6 = new char[sizeReg];
//	char *reg7 = new char[sizeReg];
//	char *reg8 = new char[sizeReg];
//	char *reg9 = new char[sizeReg];
//	char *reg10 = new char[sizeReg];
//	char *reg11 = new char[sizeReg];
//	char *reg12 = new char[sizeReg];
//	char *reg13 = new char[sizeReg];
//	char *reg14 = new char[sizeReg];
//	char *reg15 = new char[sizeReg];
//
//	char *regRead1 = new char[sizeReg];
//	char *regRead2 = new char[sizeReg];
//	char *regRead3 = new char[sizeReg];
//
//	char *regOperator1 = new char[sizeReg];
//	char *regOperator2 = new char[sizeReg];
//	char *regOperator3 = new char[sizeReg];
//	char *regOperator4 = new char[sizeReg];
//	char *regOperator5 = new char[sizeReg];
//	char *regOperator6 = new char[sizeReg];
//
//	char *regAux = new char[sizeReg];
//
//	char *regMin = new char[sizeReg];
//	char *regMax = new char[sizeReg];
//
//	memset(reg1, 0, sizeReg);
//	memset(reg2, 0, sizeReg);
//	memset(reg3, 0, sizeReg);
//	memset(reg4, 0, sizeReg);
//	memset(reg5, 0, sizeReg);
//	memset(reg6, 0, sizeReg);
//	memset(reg7, 0, sizeReg);
//	memset(reg8, 0, sizeReg);
//	memset(reg9, 0, sizeReg);
//	memset(reg10, 0, sizeReg);
//	memset(reg11, 0, sizeReg);
//	memset(reg12, 0, sizeReg);
//	memset(reg13, 0, sizeReg);
//	memset(reg14, 0, sizeReg);
//	memset(reg15, 0, sizeReg);
//	
//	memset(regRead1, 0, sizeReg);
//	memset(regRead2, 0, sizeReg);
//	memset(regRead3, 0, sizeReg);
//
//	memset(regOperator1, 0, sizeReg);
//	memset(regOperator2, 0, sizeReg);
//	memset(regOperator3, 0, sizeReg);
//	memset(regOperator4, 0, sizeReg);
//	memset(regOperator5, 0, sizeReg);
//	memset(regOperator6, 0, sizeReg);
//
//	memset(regAux, 0, sizeReg);
//
//	memset(regMin, 0, sizeReg);
//	memset(regMax, 0, sizeReg);
//
//
//	RecordHandler::REG_SET(reg1, esquema, "PADRON, NOMBRE, APELLIDO, DNI, PROMEDIO", 81000, "andres", "Szmid", 27216628, 6);
//
//	RecordHandler::REG_SET(reg2, esquema, "PADRON, NOMBRE, APELLIDO, DNI, PROMEDIO", 82000, "bruno", "diaz", 27216629, 7);
//
//	RecordHandler::REG_SET(reg3, esquema, "PADRON, NOMBRE, APELLIDO, DNI, PROMEDIO", 83000, "Natalia", "Aguirre" , 27216630, 8);
//
//	RecordHandler::REG_SET(reg4, esquema, "PADRON, NOMBRE, APELLIDO, DNI, PROMEDIO", 84000, "Maximiliano", "Croce" , 27216631, 9);
//
//	RecordHandler::REG_SET(reg5, esquema, "PADRON, NOMBRE, APELLIDO, DNI, PROMEDIO", 85000, "Alejo", "Avinjoy", 27216632, 9);
//
//	RecordHandler::REG_SET(reg6, esquema, "PADRON, NOMBRE, APELLIDO, DNI, PROMEDIO", 86000, "Bruce", "Wayne", 27216633, 9);
//
//	RecordHandler::REG_SET(reg7, esquema, "PADRON, NOMBRE, APELLIDO, DNI, PROMEDIO", 87000, "Batman", "y Robin", 27216634, 9);
//
//	RecordHandler::REG_SET(reg8, esquema, "PADRON, NOMBRE, APELLIDO, DNI, PROMEDIO", 88000, "alfred", "gay", 27216635, 9);
//
//	RecordHandler::REG_SET(reg9, esquema, "PADRON, NOMBRE, APELLIDO, DNI, PROMEDIO", 89000, "joshua", "Rubio", 27216636, 5);
//
//	RecordHandler::REG_SET(reg10, esquema, "PADRON, NOMBRE, APELLIDO, DNI, PROMEDIO", 90000, "Sabrina", "Rubio", 27216637, 5);
//
//	RecordHandler::REG_SET(reg11, esquema, "PADRON, NOMBRE, APELLIDO, DNI, PROMEDIO", 91000, "Francisco", "Rubio", 27216638, 9);
//
//	RecordHandler::REG_SET(reg12, esquema, "PADRON, NOMBRE, APELLIDO, DNI, PROMEDIO", 92000, "Martha", "Rubio", 27216639, 9);
//
//	RecordHandler::REG_SET(reg13, esquema, "PADRON, NOMBRE, APELLIDO, DNI, PROMEDIO", 93000, "Liliana", "Hernando", 27216640, 9);
//
//	RecordHandler::REG_SET(reg14, esquema, "PADRON, NOMBRE, APELLIDO, DNI, PROMEDIO", 94000, "Sergio", "Szmid", 27216641, 9);
//
//	RecordHandler::REG_SET(reg15, esquema, "PADRON, NOMBRE, APELLIDO, DNI, PROMEDIO", 95000, "German", "Szmid" , 27216642, 9);
//
//	// Testing de la Creacion de la organizacion
//
//	if(RES_OK == organization->I_CREATE("index", esquema, clavePrim))
//		std::cout << "ORGANIZACION CREADA" << std::endl;
//	else
//		std::cout << "ERROR EN LA CREACION DE LA ORGANIZACION" << std::endl;
//
//	// Testing de la Apertura de la organizacion
//
//	handler = organization->I_OPEN("index", 1);
//
//	// Testing de la Escritura de la organizacion
//
//	if(RES_OK == organization->I_WRITE(handler, reg1))
//		std::cout << "REGISTRO ESCRITO SATISFACTORIAMENTE" << std::endl;
//	else
//		std::cout << "ERROR  EN LA ESCRITURA" << std::endl;
//
//	if(RES_OK == organization->I_WRITE(handler, reg2))
//		std::cout << "REGISTRO ESCRITO SATISFACTORIAMENTE" << std::endl;
//	else
//		std::cout << "ERROR  EN LA ESCRITURA" << std::endl;
//	
//	if(RES_OK == organization->I_WRITE(handler, reg3))
//		std::cout << "REGISTRO ESCRITO SATISFACTORIAMENTE" << std::endl;
//	else
//		std::cout << "ERROR  EN LA ESCRITURA" << std::endl;
//
//	if(RES_OK == organization->I_WRITE(handler, reg4))
//		std::cout << "REGISTRO ESCRITO SATISFACTORIAMENTE" << std::endl;
//	else
//		std::cout << "ERROR  EN LA ESCRITURA" << std::endl;
//
//	if(RES_OK == organization->I_WRITE(handler, reg5))
//		std::cout << "REGISTRO ESCRITO SATISFACTORIAMENTE" << std::endl;
//	else
//		std::cout << "ERROR  EN LA ESCRITURA" << std::endl;
//
//	if(RES_OK == organization->I_WRITE(handler, reg6))
//		std::cout << "REGISTRO ESCRITO SATISFACTORIAMENTE" << std::endl;
//	else
//		std::cout << "ERROR  EN LA ESCRITURA" << std::endl;
//
//	if(RES_OK == organization->I_WRITE(handler, reg7))
//		std::cout << "REGISTRO ESCRITO SATISFACTORIAMENTE" << std::endl;
//	else
//		std::cout << "ERROR  EN LA ESCRITURA" << std::endl;
//
//	if(RES_OK == organization->I_WRITE(handler, reg8))
//		std::cout << "REGISTRO ESCRITO SATISFACTORIAMENTE" << std::endl;
//	else
//		std::cout << "ERROR  EN LA ESCRITURA" << std::endl;
//
//	if(RES_OK == organization->I_WRITE(handler, reg9))
//		std::cout << "REGISTRO ESCRITO SATISFACTORIAMENTE" << std::endl;
//	else
//		std::cout << "ERROR  EN LA ESCRITURA" << std::endl;
//
//	if(RES_OK == organization->I_WRITE(handler, reg10))
//		std::cout << "REGISTRO ESCRITO SATISFACTORIAMENTE" << std::endl;
//	else
//		std::cout << "ERROR  EN LA ESCRITURA" << std::endl;
//
//	if(RES_OK == organization->I_WRITE(handler, reg11))
//		std::cout << "REGISTRO ESCRITO SATISFACTORIAMENTE" << std::endl;
//	else
//		std::cout << "ERROR  EN LA ESCRITURA" << std::endl;
//
//	if(RES_OK == organization->I_WRITE(handler, reg12))
//		std::cout << "REGISTRO ESCRITO SATISFACTORIAMENTE" << std::endl;
//	else
//		std::cout << "ERROR  EN LA ESCRITURA" << std::endl;
//
//	if(RES_OK == organization->I_WRITE(handler, reg13))
//		std::cout << "REGISTRO ESCRITO SATISFACTORIAMENTE" << std::endl;
//	else
//		std::cout << "ERROR  EN LA ESCRITURA" << std::endl;
//
//	if(RES_OK == organization->I_WRITE(handler, reg14))
//		std::cout << "REGISTRO ESCRITO SATISFACTORIAMENTE" << std::endl;
//	else
//		std::cout << "ERROR  EN LA ESCRITURA" << std::endl;
//
//	if(RES_OK == organization->I_WRITE(handler, reg15))
//		std::cout << "REGISTRO ESCRITO SATISFACTORIAMENTE" << std::endl;
//	else
//		std::cout << "ERROR  EN LA ESCRITURA" << std::endl;
//
//	// Testing de la consulta puntual
//	RecordHandler::REG_SET(regRead1, esquema, "DNI", 27216631);
//
//	RecordHandler::REG_SET(regRead2, esquema, "DNI", 27216636);
//
//	RecordHandler::REG_SET(regRead3, esquema, "DNI", 27216639);
//
//
//	if(RES_OK == organization->I_READ(handler, regRead1) )
//	{
//		RecordHandler::REG_GET(regRead1, esquema, "PADRON, NOMBRE, APELLIDO, DNI, PROMEDIO", &padron, nombre, apellido, &dni, &promedio);
//		std::cout << "PADRON: " << padron << std::endl;
//		std::cout << "NOMBRE: " << nombre << std::endl;
//		std::cout << "APELLIDO: " << apellido << std::endl;
//		std::cout << "DNI: " << dni << std::endl;
//		std::cout << "PROMEDIO: " << promedio << std::endl;
//	}
//	else
//		std::cout << "ERROR  EN LA LECTURA PUNTUAL" << std::endl;
//	 
//	if(RES_OK == organization->I_READ(handler, regRead2) )
//	{
//		RecordHandler::REG_GET(regRead2, esquema, "PADRON, NOMBRE, APELLIDO, DNI, PROMEDIO", &padron, nombre, apellido, &dni, &promedio);
//		std::cout << "PADRON: " << padron << std::endl;
//		std::cout << "NOMBRE: " << nombre << std::endl;
//		std::cout << "APELLIDO: " << apellido << std::endl;
//		std::cout << "DNI: " << dni << std::endl;
//		std::cout << "PROMEDIO: " << promedio << std::endl;
//	}
//	else
//		std::cout << "ERROR  EN LA LECTURA PUNTUAL" << std::endl;
//
//	if(RES_OK == organization->I_READ(handler, regRead3) )
//	{
//		RecordHandler::REG_GET(regRead3, esquema, "PADRON, NOMBRE, APELLIDO, DNI, PROMEDIO", &padron, nombre, apellido, &dni, &promedio);
//		std::cout << "PADRON: " << padron << std::endl;
//		std::cout << "NOMBRE: " << nombre << std::endl;
//		std::cout << "APELLIDO: " << apellido << std::endl;
//		std::cout << "DNI: " << dni << std::endl;
//		std::cout << "PROMEDIO: " << promedio << std::endl;
//	}
//	else
//		std::cout << "ERROR  EN LA LECTURA PUNTUAL" << std::endl;
//
//
//
//	// Testing de la creacion de un indice secundario con claves dobles
//	int existe = organization->I_IS_INDEX(handler, claveSec) ;
//	if( RES_ERROR == existe)
//		std::cout << "ERROR EN EL CHEQUEO DEL INDICE" << std::endl;
//	if( existe == RES_NO_EXISTE_INDICE)
//		std::cout << "EL INDICE NO EXISTE" << std::endl;
//	if( existe != RES_NO_EXISTE_INDICE && existe != RES_ERROR)
//		std::cout << "ERROR: EL INDICE EXISTE" << std::endl;
//
//	indexId = organization->I_ADD_INDEX(handler, claveSec);
//
//	if(indexId == RES_ERROR)
//		std::cout << "ERROR EN LA CREACION DEL INDICE" << std::endl;
//	if(indexId == RES_EXISTE_INDICE)
//		std::cout << "ERROR: EL INDICE EXISTE" << std::endl;
//	if(indexId != RES_EXISTE_INDICE && indexId != RES_ERROR)
//		std::cout << "EL INDICE HA SIDO CREADO" << std::endl;
//
//	// Testing del start con los distintos operadores
//
//	std::cout << "TESTING OPERADOR < " << std::endl;
//
//	RecordHandler::REG_SET(regOperator1, esquema, "NOMBRE, APELLIDO", "Sabrina", "Rubio");
//
//	if(RES_OK == organization->I_START(handler, indexId, "<", regOperator1))
//	{
//		status = organization->I_READ_NEXT(handler, indexId, regAux);	
//		while( status == RES_OK)
//		{
//			RecordHandler::REG_GET(regAux, esquema, "PADRON, NOMBRE, APELLIDO, DNI, PROMEDIO", &padron, nombre, apellido, &dni, &promedio);
//			std::cout << "PADRON: " << padron << std::endl;
//			std::cout << "NOMBRE: " << nombre << std::endl;
//			std::cout << "APELLIDO: " << apellido << std::endl;
//			std::cout << "DNI: " << dni << std::endl;
//			std::cout << "PROMEDIO: " << promedio << std::endl;
//			std::cout << std::endl;
//
//			status = organization->I_READ_NEXT(handler, indexId, regAux);	
//		}
//	}
//
//	std::cout << "TESTING OPERADOR <= " << std::endl;
//
//	RecordHandler::REG_SET(regOperator2, esquema, "NOMBRE, APELLIDO", "Sabrina", "Rubio");
//
//	if(RES_OK == organization->I_START(handler, indexId, "<=", regOperator2))
//	{
//		status = organization->I_READ_NEXT(handler, indexId, regAux);	
//		while( status == RES_OK)
//		{
//			RecordHandler::REG_GET(regAux, esquema, "PADRON, NOMBRE, APELLIDO, DNI, PROMEDIO", &padron, nombre, apellido, &dni, &promedio);
//			std::cout << "PADRON: " << padron << std::endl;
//			std::cout << "NOMBRE: " << nombre << std::endl;
//			std::cout << "APELLIDO: " << apellido << std::endl;
//			std::cout << "DNI: " << dni << std::endl;
//			std::cout << "PROMEDIO: " << promedio << std::endl;
//			std::cout << std::endl;
//
//			status = organization->I_READ_NEXT(handler, indexId, regAux);	
//		}	
//	}	
//	
//	std::cout << "TESTING OPERADOR = " << std::endl;
//
//	RecordHandler::REG_SET(regOperator3, esquema, "NOMBRE, APELLIDO", "Sabrina", "Rubio");
//
//	if(RES_OK == organization->I_START(handler, indexId, "=", regOperator3))
//	{
//		status = organization->I_READ_NEXT(handler, indexId, regAux);	
//		while( status == RES_OK)
//		{
//			RecordHandler::REG_GET(regAux, esquema, "PADRON, NOMBRE, APELLIDO, DNI, PROMEDIO", &padron, nombre, apellido, &dni, &promedio);
//			std::cout << "PADRON: " << padron << std::endl;
//			std::cout << "NOMBRE: " << nombre << std::endl;
//			std::cout << "APELLIDO: " << apellido << std::endl;
//			std::cout << "DNI: " << dni << std::endl;
//			std::cout << "PROMEDIO: " << promedio << std::endl;
//			std::cout << std::endl;
//
//			status = organization->I_READ_NEXT(handler, indexId, regAux);	
//		}	
//	}
//
//	std::cout << "TESTING OPERADOR != " << std::endl;
//
//	RecordHandler::REG_SET(regOperator4, esquema, "NOMBRE, APELLIDO", "Sabrina", "Rubio");
//
//	if(RES_OK == organization->I_START(handler, indexId, "!=", regOperator4))
//	{
//		status = organization->I_READ_NEXT(handler, indexId, regAux);	
//		while( status == RES_OK)
//		{
//			RecordHandler::REG_GET(regAux, esquema, "PADRON, NOMBRE, APELLIDO, DNI, PROMEDIO", &padron, nombre, apellido, &dni, &promedio);
//			std::cout << "PADRON: " << padron << std::endl;
//			std::cout << "NOMBRE: " << nombre << std::endl;
//			std::cout << "APELLIDO: " << apellido << std::endl;
//			std::cout << "DNI: " << dni << std::endl;
//			std::cout << "PROMEDIO: " << promedio << std::endl;
//			std::cout << std::endl;
//
//			status = organization->I_READ_NEXT(handler, indexId, regAux);	
//		}
//	}
//
//	std::cout << "TESTING OPERADOR > " << std::endl;
//
//	RecordHandler::REG_SET(regOperator5, esquema, "NOMBRE, APELLIDO", "Sabrina", "Rubio");
//
//	if(RES_OK == organization->I_START(handler, indexId, ">", regOperator5))
//	{
//		status = organization->I_READ_NEXT(handler, indexId, regAux);	
//		while( status == RES_OK)
//		{
//			RecordHandler::REG_GET(regAux, esquema, "PADRON, NOMBRE, APELLIDO, DNI, PROMEDIO", &padron, nombre, apellido, &dni, &promedio);
//			std::cout << "PADRON: " << padron << std::endl;
//			std::cout << "NOMBRE: " << nombre << std::endl;
//			std::cout << "APELLIDO: " << apellido << std::endl;
//			std::cout << "DNI: " << dni << std::endl;
//			std::cout << "PROMEDIO: " << promedio << std::endl;
//			std::cout << std::endl;
//
//			status = organization->I_READ_NEXT(handler, indexId, regAux);	
//		}	
//	}
//
//	std::cout << "TESTING OPERADOR >= " << std::endl;
//
//	RecordHandler::REG_SET(regOperator6, esquema, "NOMBRE, APELLIDO", "Sabrina", "Rubio");
//
//	if(RES_OK == organization->I_START(handler, indexId, ">=", regOperator6))
//	{
//		status = organization->I_READ_NEXT(handler, indexId, regAux);	
//		while( status == RES_OK)
//		{
//			RecordHandler::REG_GET(regAux, esquema, "PADRON, NOMBRE, APELLIDO, DNI, PROMEDIO", &padron, nombre, apellido, &dni, &promedio);
//			std::cout << "PADRON: " << padron << std::endl;
//			std::cout << "NOMBRE: " << nombre << std::endl;
//			std::cout << "APELLIDO: " << apellido << std::endl;
//			std::cout << "DNI: " << dni << std::endl;
//			std::cout << "PROMEDIO: " << promedio << std::endl;
//			std::cout << std::endl;
//
//			status = organization->I_READ_NEXT(handler, indexId, regAux);	
//		}	
//	}
//
//	// Testing del Maximo y minimo
//
//	std::cout << std::endl << "TESTING MINIMO " << std::endl << std::endl;
//
//	if( RES_OK == organization->I_MIN(handler, indexId, regMin))
//	{
//		RecordHandler::REG_GET(regMin, esquema, "PADRON, NOMBRE, APELLIDO, DNI, PROMEDIO", &padron, nombre, apellido, &dni, &promedio);
//		std::cout << "PADRON: " << padron << std::endl;
//		std::cout << "NOMBRE: " << nombre << std::endl;
//		std::cout << "APELLIDO: " << apellido << std::endl;
//		std::cout << "DNI: " << dni << std::endl;
//		std::cout << "PROMEDIO: " << promedio << std::endl;
//	}
//	else
//		std::cout << "ERROR  EN LA CONSULTA DEL MINIMO" << std::endl;		
//
//	std::cout << std::endl << "TESTING MAXIMO " << std::endl << std::endl;
//
//	if( RES_OK == organization->I_MAX(handler, indexId, regMax))
//	{
//		RecordHandler::REG_GET(regMax, esquema, "PADRON, NOMBRE, APELLIDO, DNI, PROMEDIO", &padron, nombre, apellido, &dni, &promedio);
//		std::cout << "PADRON: " << padron << std::endl;
//		std::cout << "NOMBRE: " << nombre << std::endl;
//		std::cout << "APELLIDO: " << apellido << std::endl;
//		std::cout << "DNI: " << dni << std::endl;
//		std::cout << "PROMEDIO: " << promedio << std::endl;
//	}
//	else
//		std::cout << "ERROR  EN LA CONSULTA DEL MAXIMO" << std::endl;		
//
//	// Testing del close
//	organization->I_CLOSE(handler);
//
//	// Testing del destroy
//	organization->I_DESTROY("index");
//
//	delete organization;
//
//	remove("MetadataOrganization.dat");
//
//	delete []reg1;
//	delete []reg2;
//	delete []reg3;
//	delete []reg4;
//	delete []reg5;
//	delete []reg6;
//	delete []reg7;
//	delete []reg8;
//	delete []reg9;
//	delete []reg10;
//	delete []reg11;
//	delete []reg12;
//	delete []reg13;
//	delete []reg14;
//	delete []reg15;
//
//	delete []regRead1;
//	delete []regRead2;
//	delete []regRead3;
//
//	delete []regOperator1;
//	delete []regOperator2;
//	delete []regOperator3;
//	delete []regOperator4;
//	delete []regOperator5;
//	delete []regOperator6;
//
//	delete []regAux;
//
//	delete []regMax;
//	delete []regMin;
//
//
//	
	return 0;
}

